package br.uvv.Service;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import org.primefaces.model.SortOrder;

import br.uvv.Dao.ClientePortalDAO;
import br.uvv.Dao.UsuarioDAO;
import br.uvv.Enums.SituClientePortal;
import br.uvv.Enums.SituUsuario;
import br.uvv.Model.ClientePortal;
import br.uvv.Model.Usuario;
import br.uvv.Util.CorreioEletronico;
import br.uvv.Util.CriptoHashUtil;
import br.uvv.Util.DAOException;
import br.uvv.Util.MsgUtil;
import br.uvv.Util.RNException;
import br.uvv.Util.Util;

public class AprovacaoClientePortalService implements Serializable {

	private static final long serialVersionUID = -3370154250562110511L;

	private ClientePortalDAO dao = new ClientePortalDAO();
	
	public List<ClientePortal> listarClientePortal(int first, int pageSize,
			String sortField, SortOrder sortOrder, String varNome,
			String varUsuario, Date varCadastroDe, Date varCadastroAte) throws RNException {
		try {
			return dao.listar(first, pageSize, sortField, sortOrder, "");
//			return dao.listar(first, pageSize, sortField, sortOrder, varNome, 
//					varUsuario, varCadastroDe, varCadastroAte);
		} catch (DAOException e) {
			throw new RNException(e);
		}
	}

	public Integer countClientePortal(String varNome, String varUsuario,
			Date varCadastroDe, Date varCadastroAte) throws RNException {
		try {
			return dao.count("");
//			return dao.count(varNome, varUsuario, varCadastroDe, varCadastroAte);
		} catch (DAOException e) {
			throw new RNException(e);
		}
	}

	public ClientePortal selecionarClientePortalComResponsavel(Long id) throws RNException {
		try {
			return dao.selecionarComResponsavel(id);
		} catch (DAOException e) {
			throw new RNException(e);
		}
	}

	public void aprovarClientePortal(ClientePortal clientePortalInstance) throws RNException {
		try {
			clientePortalInstance.setSituacao(SituClientePortal.Ativo);
			clientePortalInstance.setDataAprovacao(new Date());
			Usuario usuarioInstance = clientePortalInstance.getResponsavel();
			String senha = Util.gerarSenha();
			usuarioInstance.setSituacao(SituUsuario.Ativo);
			usuarioInstance.setSenha(CriptoHashUtil.hash("SHA1", senha));
			UsuarioDAO daoUsuario = new UsuarioDAO();
			dao.salvar(clientePortalInstance);
			daoUsuario.salvar(usuarioInstance);
			enviarEmail(usuarioInstance.getEmail(), senha);
		} catch (DAOException e) {
			throw new RNException(e);
		}
	}
	
	public ClientePortal selecionarClientePortal(Long id) throws RNException {
		try {
			return dao.selecionar(id);
		} catch (DAOException e) {
			throw new RNException(e);
		}
	}
	
	public ClientePortal selecionarClientePortalComUsuarios(Long id) throws RNException {
		try {
			return dao.selecionarComUsuarios(id);
		} catch (DAOException e) {
			throw new RNException(e);
		}
	}

	private void enviarEmail(String email, String senha) {
		String msg = MsgUtil.getMensagem("EmailAprovacao_Mensagem", email, senha);
		try {
			CorreioEletronico mail = new CorreioEletronico();
			mail.setDe("hermann.neto@geen.com.br");
			mail.setTitulo(MsgUtil.getMensagem("EmailAprovacao_Titulo"));
			mail.setMensagem(msg);
			mail.setPara(email);
			mail.send();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}